home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src.arc / IP.H < prev    next >
C/C++ Source or Header  |  1989-08-18  |  5KB  |  151 lines

  1. #ifndef    NROUTE
  2.  
  3. #include "global.h"
  4. #include "timer.h"
  5.  
  6. #define    NROUTE    5    /* Number of hash chains in routing table */
  7. #define    TLB    30000    /* Default reassembly timeout */
  8. #define    IPVERSION    4
  9.  
  10. extern int32 Ip_addr;        /* Our IP address for ICMP and source routing */
  11. extern int16 Ip_ttl;    /* Default time-to-live for IP datagrams */
  12. extern int32 Ip_rtime;        /* IP reassembly timeout */
  13.  
  14. /* IP header, INTERNAL representation */
  15. struct ip {
  16.     char version;        /* IP version number */
  17.     char tos;        /* Type of service */
  18.     int16 length;        /* Total length */
  19.     int16 id;        /* Identification */
  20.     int16 offset;        /* Fragment offset in bytes */
  21.     struct {
  22.         char df;    /* Don't fragment flag */
  23.         char mf;    /* More Fragments flag */
  24.     } flags;
  25.  
  26.     char ttl;        /* Time to live */
  27.     char protocol;        /* Protocol */
  28.     int32 source;        /* Source address */
  29.     int32 dest;        /* Destination address */
  30.     char options[44];    /* Options field */
  31.     int16 optlen;        /* Length of options field, bytes */
  32. };
  33. #define    NULLIP    (struct ip *)0
  34. #define    IPLEN    20    /* Length of standard IP header */
  35.  
  36. /* Fields in option type byte */
  37. #define    OPT_COPIED    0x80    /* Copied-on-fragmentation flag */
  38. #define    OPT_CLASS    0x60    /* Option class */
  39. #define    OPT_NUMBER    0x1f    /* Option number */
  40.  
  41. /* IP option numbers */
  42. #define    IP_EOL        0    /* End of options list */
  43. #define    IP_NOOP        1    /* No Operation */
  44. #define    IP_SECURITY    2    /* Security parameters */
  45. #define    IP_LSROUTE    3    /* Loose Source Routing */
  46. #define    IP_TIMESTAMP    4    /* Internet Timestamp */
  47. #define    IP_RROUTE    7    /* Record Route */
  48. #define    IP_STREAMID    8    /* Stream ID */
  49. #define    IP_SSROUTE    9    /* Strict Source Routing */
  50.  
  51. /* Timestamp option flags */
  52. #define    TS_ONLY        0    /* Time stamps only */
  53. #define    TS_ADDRESS    1    /* Addresses + Time stamps */
  54. #define    TS_PRESPEC    3    /* Prespecified addresses only */
  55.  
  56. /* IP routing table entry */
  57. struct route {
  58.     struct route *prev;    /* Linked list pointers */
  59.     struct route *next;
  60.     int32 target;        /* Target IP address */
  61.     int32 gateway;        /* IP address of local gateway for this target */
  62.     struct iface *iface;    /* Device interface structure */
  63.     int32 uses;        /* Usage count */
  64. };
  65. #define    NULLROUTE    (struct route *)0
  66. extern struct route *Routes[32][NROUTE];    /* Routing table */
  67. extern struct route R_default;            /* Default route entry */
  68.  
  69. /* Cache for the last-used routing entry, speeds up the common case where
  70.  * we handle a burst of packets to the same destination
  71.  */
  72. struct rt_cache {
  73.     int32 target;
  74.     struct route *route;
  75. };
  76. extern struct rt_cache Rt_cache;
  77.  
  78. /* Reassembly descriptor */
  79. struct reasm {
  80.     struct reasm *next;    /* Linked list pointers */
  81.     struct reasm *prev;
  82.     struct timer timer;    /* Reassembly timeout timer */
  83.     struct frag *fraglist;    /* Head of data fragment chain */
  84.     int16 length;        /* Entire datagram length, if known */
  85.     int32 source;        /* src/dest/id/protocol uniquely describe a datagram */
  86.     int32 dest;
  87.     int16 id;
  88.     char protocol;
  89. };
  90. #define    NULLREASM    (struct reasm *)0
  91.  
  92. /* Fragment descriptor in a reassembly list */
  93. struct frag {
  94.     struct frag *prev;    /* Previous fragment on list */
  95.     struct frag *next;    /* Next fragment */
  96.     struct mbuf *buf;    /* Actual fragment data */
  97.     int16 offset;        /* Starting offset of fragment */
  98.     int16 last;        /* Ending offset of fragment */
  99. };
  100. #define    NULLFRAG    (struct frag *)0
  101.  
  102. extern struct reasm *Reasmq;    /* The list of reassembly descriptors */
  103.  
  104. /* IP error logging counters */
  105. struct ip_stats {
  106.     long total;        /* Total packets received */
  107.     unsigned runt;        /* Smaller than minimum size */
  108.     unsigned length;    /* IP header length field too small */
  109.     unsigned version;    /* Wrong IP version */
  110.     unsigned checksum;    /* IP header checksum errors */
  111.     unsigned badproto;    /* Unsupported protocol */
  112. };
  113. extern struct ip_stats Ip_stats;
  114.  
  115. /* Structure for handling raw IP user sockets */
  116. struct raw_ip {
  117.     struct raw_ip *prev;
  118.     struct raw_ip *next;
  119.  
  120.     struct mbuf *rcvq;    /* receive queue */
  121.     void (*r_upcall) __ARGS((struct raw_ip *));
  122.     char protocol;        /* Protocol */
  123.     int user;        /* User linkage */
  124. };
  125. #define    NULLRIP    ((struct raw_ip *)0)
  126. extern struct raw_ip *Raw_ip;
  127.  
  128. /* In ip.c: */
  129. void ip_recv __ARGS((struct ip *ip,struct mbuf *bp,char rxbroadcast));
  130. int ip_send __ARGS((int32 source,int32 dest,char protocol,char tos,char ttl,
  131.     struct mbuf *bp,int16 length,int16 id,char df));
  132. struct raw_ip *raw_ip __ARGS((char protocol,void (*r_upcall) __ARGS((struct raw_ip *)) ));
  133. void del_ip __ARGS((struct raw_ip *rrp));
  134.  
  135. /* In iproute.c: */
  136. int16 cksum __ARGS((struct pseudo_header *ph,struct mbuf *m,int16 len));
  137. int16 eac __ARGS((int32 sum));
  138. struct mbuf *htonip __ARGS((struct ip *ip,struct mbuf *data));
  139. int16 ip_mtu __ARGS((int32 addr));
  140. int ip_route __ARGS((struct mbuf *bp,int rxbroadcast));
  141. int ntohip __ARGS((struct ip *ip,struct mbuf **bpp));
  142. int rt_add __ARGS((int32 target,unsigned int bits,int32 gateway,struct iface *iface));
  143. int rt_drop __ARGS((int32 target,unsigned int bits));
  144.  
  145. /* In either lcsum.c or pcgen.asm: */
  146. int16 lcsum __ARGS((int16 *wp,int16 len));
  147.  
  148. #endif /* NROUTE */
  149.  
  150.  
  151.